/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.gui.frames.internos;

import controle.gui.frames.ControleFramePrincipal;
import controle.gui.utils.Criptografia;
import controle.gui.utils.TamanhoJTextField;
import gui.frames.FramePrincipal;
import gui.frames.internos.IFLogin;
import java.util.List;
import javax.swing.JOptionPane;
import modelo.Agente;
import persistencia.dao.AbstractDAO;

/**
 *
 * @author Maycon Fernando Silva Brito
 * @email mayconfsbrito@gmail.com
 */
public class ControleLogin {

    /*Variáveis da Classe*/
    private IFLogin frame = null;
    private final int[] tamanhosJTextField = {45, 45};

    /*Construtor*/
    public ControleLogin(IFLogin frame) {
        /*Instancia o frame a ser controlado*/
        this.frame = frame;
    }

    public void inicializa() {

        /*Inicializa o panel de mensagens*/
        //frame.textMensagem.setEditable(false);
        frame.textMensagem.setText("Faça o login para usar o sistema.");

        /*Limita as TextFields*/
        TamanhoJTextField.limitaTamanho(tamanhosJTextField, frame.textLogin, frame.textSenha);

        /*Configura o comportamento*/
        FramePrincipal.buttonLogin.setEnabled(false);
        if (ControleFramePrincipal.user == null) {
            frame.buttonCancelar.setEnabled(false);
        } else {
            frame.buttonCancelar.setEnabled(true);
        }

        /*Centraliza no DesktopPane*/
        frame.centraliza();
    }

    public void limparGUI() {
        frame.textLogin.setText("");
        frame.textSenha.setText("");
    }

    public void cancelar() {
        /**Caso não tenha algum usuário logado não fecha*/
        if (ControleFramePrincipal.user != null) {
            //FramePrincipal.buttonLogin.setEnabled(true);
            frame.dispose();
        }
    }

    public void login() {
        /*Caso os campos estejam preenchidos*/
        if ((!frame.textLogin.getText().isEmpty()) && (frame.textSenha.getPassword().length > 0)) {

            /*Recupera os dados deste usuário no bd*/
            List<Agente> listUsuario = AbstractDAO.consultar("Agente", "login like '" + frame.textLogin.getText() + "'");

            /*Verifica se existe algum usuário com este abreIFLogin no bd*/
            if (listUsuario.size() > 0) {
                /*Verifica se a senha está correta*/
                if (listUsuario.get(0).getSenha().equals(Criptografia.md5(new String(frame.textSenha.getPassword())))) {
                    /*Verifica se o usuário está ativo no sistema*/
                    if (listUsuario.get(0).isAtivo()) {
                        /*Conecta o usuário ao sistema*/
                        if (ControleFramePrincipal.conectaUsuario(listUsuario.get(0))) {
                            
                            /*Realiza o login*/
                            ControleFramePrincipal.login();
                            this.limparGUI();
                            this.cancelar();
                            
                        } else {
                            JOptionPane.showMessageDialog(frame, "Erro ao realizar a conexão do usuário.\n"
                                    + "Favor contactar o administrador do sistema.",
                                    "Erro!", JOptionPane.ERROR_MESSAGE);
                        }
                    } else {
                        JOptionPane.showMessageDialog(frame, "O usuário encontra-se inativo para utilizar este sistema.\n"
                                + "Favor contactar o administrador do sistema para poder utilizá-lo novamente.",
                                "Usuário inativo!", JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    JOptionPane.showMessageDialog(frame, "Senha incorreta. Tente novamente ou contacte o administrador do sistema.", "Senha inválida!", JOptionPane.ERROR_MESSAGE);
                    frame.textSenha.setText("");
                }
            } else {
                JOptionPane.showMessageDialog(frame, "Usuário inválido!", "Usuário inválido!", JOptionPane.ERROR_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(frame, "Por favor, preencha o usuário e a senha.", "Usuário.", JOptionPane.ERROR_MESSAGE);
        }
    }
}
